home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Atari Compendium
/
The Atari Compendium (Toad Computers) (1994).iso
/
files
/
umich
/
tex
/
td187src.lzh
/
FILL.I
< prev
next >
Wrap
Text File
|
1991-12-14
|
3KB
|
121 lines
IMPLEMENTATION MODULE Fill;
IMPORT CommonData;
IMPORT MagicAES;
IMPORT MagicVDI;
IMPORT mtAppl;
(**
IMPORT GEMError;
IMPORT RTD;
**)
(* -------------------------------------------------------------- *)
(* Initialisierung des selbst erzeugten Füllpatterns *)
(* -------------------------------------------------------------- *)
(* Setze den VDI-Fill-Modus (eigene Definition für left *)
VAR LeftPattern : ARRAY [1..1],[1..16] OF INTEGER;
(**
PROCEDURE SetUserfillpattern (handle: sINTEGER; VAR pat: ARRAY OF LOC);
VAR old: ADDRESS;
BEGIN
old:= VDIPB.intin;
VDIPB.intin:= ADR (pat);
VDICall (112, 0, HIGH(pat) * 16, 0, handle);
VDIPB.intin:= old;
END SetUserfillpattern;
**)
PROCEDURE SetFillPattern;
CONST abstand = 2;
VAR i : INTEGER;
b : BITSET;
PROCEDURE MakePattern (startbit : INTEGER);
VAR j, k : INTEGER;
BEGIN
b := BITSET{}; (* löschen *)
k := 0;
REPEAT
j := startbit;
(*
Das ganze muß jetzt geeignet aufbereitet werden,
da das Pattern in Intel-Konvention erwartet wird.
*)
IF j>7 THEN
(* MSB first *)
INCL(b, j - 8);
ELSE
(* LSB last *)
INCL(b, j + 8);
END;
INC(j, abstand);
INC(k, 1);
IF (j>15) THEN
DEC(j, 16);
END;
UNTIL (k >= 16 DIV abstand);
END MakePattern;
BEGIN
FOR i:=1 TO 16 DO
LeftPattern[1, i] := 0;
END;
FOR i:=1 TO 16 DO
MakePattern(16-i);
LeftPattern[1, i] := INTEGER(b);
END;
(* Einfaches Muster von links oben nach rechts unten *)
END SetFillPattern;
PROCEDURE SetFillMode ( FillMode : INTEGER) ;
(*
Setze Fill-Modus (wie oben angegeben)
*)
VAR fillstyle, fillstyleindex, dum : INTEGER;
BEGIN
(* Hatch mode *)
fillstyle := MagicVDI.Hatch;
CASE FillMode OF
0 : fillstyle := MagicVDI.Full;
fillstyleindex := -1;| (* paint *)
1 : fillstyleindex := 5; | (* hor *)
2 : fillstyleindex := 4; | (* ver *)
3 : fillstyleindex := 6; | (* horver *)
(** Original, führt nun nicht mehr zu Abstürzen... **)
4 : fillstyle := MagicVDI.UserFill;
fillstyleindex :=-1; | (* User Def *)
(**)
(** Hilfsversion **
4 : fillstyleindex := 1; | (* User Def *)
**)
5 : fillstyleindex := 1; | (* right *)
6 : fillstyleindex := 3; | (* leftright *)
ELSE
fillstyle := MagicVDI.None; (* hollow *)
fillstyleindex := -1;
END;
dum := MagicVDI.SetFillinterior (mtAppl.VDIHandle , fillstyle);
IF fillstyle=MagicVDI.UserFill THEN
(* nur 1 Plane *)
MagicVDI.SetUserfillpattern(mtAppl.VDIHandle, LeftPattern);
ELSE
IF fillstyleindex>0 THEN
dum := MagicVDI.SetFillstyle(mtAppl.VDIHandle, fillstyleindex);
END;
END;
dum := MagicVDI.SetFillcolor (mtAppl.VDIHandle , MagicAES.BLACK);
END SetFillMode;
BEGIN
(**
RTD.Into('Mod.Fill');
**)
SetFillPattern;
(**
RTD.Leaving('Mod.Fill');
**)
END (* of definition module *) Fill .